<!DOCTYPE html>
<html data-th-replace="~{layout :: layout(~{::head/content()}, 'event-driven', ~{::div})}">
<head>
    <title>Spring | Event Driven</title>
    <meta property='og:title' content='Event-driven architectures'/>
    <meta property='og:description' content='Event-driven systems reflect how modern businesses actually work–thousands of small changes happening all day, every day. Spring’s ability to handle events and easily build applications around them, allows your apps to stay in sync with your business.'/>
</head>
<body>
<div>
    <div id='hero' class='topics-banner mb-5'>
        <div id="midshape" data-th-insert="~{svg/_shapes :: header-batch}"></div>
    </div>
    <section class='content' role='Main'>
        <section class='container'>
            <h1 class='h1'>Event Driven</h1>
            <div class='flex jc-between topic-hero'>
                <div class='left m-0 topic-info'>
                    <p class='big'>Event-driven systems reflect how modern businesses actually work–thousands of small changes happening all day, every day. Spring’s ability to handle events and enable developers to build applications around them, means your apps will stay in sync with your business. Spring has a number of event-driven options to choose from, from integration and streaming all the way to cloud functions and data flows.</p>
                </div>
                <img class='as-fs topic-icon img-light' data-th-src="@{/images/streams.svg}" alt=''>
                <img class='as-fs topic-icon img-dark' data-th-src="@{/images/streams-dark.svg}" alt=''>
            </div>
        </section>
        <section class='container'>
            <div id='trio' class='flex jc-between py-50'>
                <div class='third'>
                    <h3 class='h3'>Event-driven microservices</h3>
                        <p>When combined with microservices, event streaming opens up exciting opportunities&mdash;event-driven architecture being one common example. Spring simplifies the production, processing, and consumption of events, providing several useful abstractions.</p>
                </div>
                <div class='third'>
                    <h3 class='h3'>Streaming data</h3>
                        <p>Streaming data represents a constant flow of events.  One example might be a stock ticker. Every time a stock price changes, a new event is created. It’s called “streaming data” because there are thousands of these events resulting in a constant stream of data.</p>
                </div>
                <div class='third'>
                    <h3 class='h3'>Integration</h3>
                        <p>The bedrock of any event-driven system is  message handling. Connecting to message platforms, routing messages, transforming messages, processing messages. With  Spring you can solve these integration challenges quickly.</p>
                </div>
            </div>
        </section>
        <section class='cornell container'>
            <div class='flex jc-between py-50'>
                <div class='left third'>
                    <h2 class='h2'>Spring Cloud Stream</h2>
                </div>
                <div class='right'>
                    <p class='mb-3'>Spring Cloud Stream improves your productivity when working with Apache Kafka, RabbitMQ, Azure Event Hub, and more, providing three key abstractions to simplify your code. “Binders” integrate with external messaging systems. “Bindings” bridge the gap between the messaging systems and your code. “Messages” provide the structure that your code uses to send and receive data.</p>
                    <p>Spring Cloud Stream also provides support for provisioning, content conversion, error handling, configuration management, consumer groups, partitioning, monitoring, and health checks.</p>
                    <a class='link-animate blue' href='https://cloud.spring.io/spring-cloud-static/spring-cloud-stream/current/reference/html/spring-cloud-stream.html#_quick_start'>Getting Started with Stream Processing</a>
                </div>
            </div>
            <div id='quote' class='flex mb-4 mx-auto jc-between'>
                <a class='thumbnail block as-fs' href="https://www.youtube.com/watch?v=khzC-VwpFVM">
                    <img src="/images/video-gursel.jpg" alt=''/>
                    <div class='play'><div class='relative'><div class='triangle'></div></div></div>
                </a>
                <div class='text'>
                    <blockquote class='h3 green antialiased m-0'>“Spring [Cloud] Stream and Spring solutions help us to have a cohesive solution for both imperative and reactive needs.”</blockquote>
                    <div class='quoted bold uppercase antialiased'>
                        Anil Gursel, Software Engineer, PayPal
                    </div>
                </div>
            </div>
        </section>
        <section class='cornell container'>
            <div class='flex jc-between py-50'>
                <div class='left third'>
                    <h2 class='h2'>Spring Cloud Function</h2>
                </div>
                <div class='right'>
                    <p class='mb-3'>Spring Cloud Function, enables you to write functions once and run them anywhere (AWS, Azure, etc.), while continuing to use all the familiar and comprehensive Spring APIs. You can chain multiple functions together to create new capabilities. Support for multiple inputs and outputs brings merging, joining, and other more advanced use cases within easy reach. <a class='blue link-animate' href="/projects/spring-cloud-function">Learn more</a></p>
                    <div class='terminal rad-5 border-box mb-3'>
                        <code>
                            <span class='terminal-blue'>@SpringBootApplication</span><br>
                            <span class='terminal-green'>public class</span> Application {<br>
                            <div class='indent'>
                                <span class='terminal-green'>public static void</span> main(String[] args) {<br>
                                <div class='indent'>SpringApplication.run&#40;Application.class, args&#41;;</div>
                                }
                                <br>
                                <br>
                                <span class='terminal-blue'>@Bean</span><br>
                                <span class='terminal-green'>public </span> Function&lt;String, String&gt; uppercase() {<br>
                                <div class='indent'><span class='terminal-green'>return</span> value -> value.toUpperCase();</div>
                                }
                                <br>
                            </div>
                            }
                        </code>
                    </div>
                </div>
            </div>
        </section>
        <section id='dataflow' class='cornell container'>
            <div class='flex jc-between py-50'>
                <div class='left third'>
                    <h2 class='h2'>Spring Cloud Data Flow</h2>
                </div>
                <div class='right flex jc-between'>
                    <img class='as-fs half mr-40' data-th-src="@{/images/dataflow-stream-details.png}" alt="Spring Cloud Data Flow"/>
                    <p class='m-0 half'>Spring Cloud Data Flow offers developers a range of tools and automation for working with all kinds of data sources and destinations. Spring Cloud Data Flow helps you to develop, deploy, manage, and scale high-throughput streaming data pipelines across multiple cloud-native platforms. It also features a rich user interface for building and monitoring your applications. <br><a class='blue link-animate' href='https://dataflow.spring.io/'>Learn more</a></p>
                </div>
            </div>
        </section>
        <section id='kakfastreams' class='cornell container'>
            <div class='flex jc-between py-50'>
                <div class='left third'>
                    <h2 class='h2'>Spring Cloud Kafka Streams</h2>
                </div>
                <div class='right'>
                    <div class='flex jc-between'>
                        <div class='text'>
                            <p>Spring Cloud Stream provides a second, more specific binder solely for working with Kafka Streams. This special binder still focuses on developer productivity but adds support for Kafka-specific features like KStream, KTable, and GlobalKTable. As with regular Spring Cloud Stream, the binder also takes care of connecting to Kafka, as well as creating, configuring, and maintaining the streams and topics. <a class='blue link-animate' href='https://www.confluent.io/blog/spring-for-apache-kafka-deep-dive-part-2-apache-kafka-spring-cloud-stream/'>Learn more</a></p>
                        </div>
                        <img class='img-light' data-th-src="@{/images/apache-kakfa.svg}" alt=''>
                        <img class='img-dark' data-th-src="@{/images/apache-kakfa-dark.svg}" alt=''>
                    </div>
                </div>
            </div>
        </section>
        <section class='cornell container mb-2'>
            <div class='flex jc-between py-50'>
                <div class='left third'>
                    <h2 class='h2'>Spring AMQP and Spring for Apache Kafka</h2>
                </div>
                <div class='right'>
                    <p class='m-0'>With the Spring AMQP and Spring for Apache Kafka projects, you can apply core Spring concepts to the development of Kafka- or RabbitMQ-based messaging solutions.</p>
                    <p>Both include "template" as a high-level message handling abstraction, and support message-driven POJOs with a "listener container."</p>
                    <p><a class='link-animate blue' href='/projects/spring-amqp'>Spring AMQP</a><br><a class='link-animate blue' href='/projects/spring-kafka'>Spring for Apache Kafka</a></p>
                </div>
            </div>
        </section>
        <section class='cornell container mb-2'>
            <div class='flex jc-between py-50'>
                <div class='left third'>
                    <h2 class='h2'>Spring Integration</h2>
                </div>
                <div class='right'>
                    <p>Application integration is a challenge for every enterprise. Spring Integration eases this burden by extending the popular Spring programming model to include all the most common integration patterns. There are ready made connectors for messaging platforms, communications protocols, file systems, and service providers, as well as implementations of common patterns like message routing, data transformation, and filters.</p>
                    <p><a class='blue link-animate' href="/guides/gs/integration/">Get Started with Spring Integration</a></p>
                </div>
            </div>
        </section>
        <section class='topic-getstarted mb-6 container center'>
            <div class='bg-lightblue py-40'>
                <h2 class='h2'>Ready to get started?</h2>
                <div class='flex jc-center'>
                    <a class='button animate uppercase' href='/blog/2019/10/15/simple-event-driven-microservices-with-spring-cloud-stream'><span>Try this tutorial</span></a>
                </div>
            </div>
        </section>
        <section class='topics-resources mb-7'>
            <div class='container'>
                <!-- <hr class='dark'> -->
                <h2 class='h2'>
                    More resources
                </h2>
                <div class='flex jc-between'>
                    <div class='item third'>
                        <a class='thumbnail mb-1 block' href='https://www.youtube.com/watch?v=9I3CDfHKfNY'>
                            <img data-th-src="@{/images/streams-res1.png}" alt='Play "Kafka Summit 2019 Keynote" on YouTube'>
                            <div class='play'><div class='relative'><div class='triangle'></div></div></div>
                        </a>
                        <a class='h3 blue mb-1 inline-block link-darken' href='https://www.youtube.com/watch?v=9I3CDfHKfNY'>Kafka Summit 2019 Keynote</a>
                        <div class='author'>James Watters</div>
                    </div>
                    <div class='item third'>
                        <a class='thumbnail mb-1 block' href='https://content.pivotal.io/webinars/jun-6-boosting-microservice-performance-with-kafka-rabbitmq-and-spring-webinar'>
                            <img data-th-src="@{/images/streams-res2.png}" alt='Boosting Microservice Performance with Kafka'>
                            <div class='play'><div class='relative'><div class='triangle'></div></div></div>
                        </a>
                        <a class='h3 blue mb-1 inline-block link-darken' href='https://content.pivotal.io/webinars/jun-6-boosting-microservice-performance-with-kafka-rabbitmq-and-spring-webinar'>Boosting Microservice Performance with Kafka</a>
                        <div class='author'>Mark Heckler</div>
                    </div>
                    <div class='item third'>
                        <a class='thumbnail mb-1 block' href='https://content.pivotal.io/content-developers/getting-started-with-spring-cloud-stream'>
                            <img data-th-src="@{/images/streams-res3.png}" alt='Getting Started With Spring Cloud Stream'>
                        </a>
                        <a class='h3 blue mb-1 inline-block link-darken' href='https://content.pivotal.io/content-developers/getting-started-with-spring-cloud-stream'>Getting Started With Spring Cloud Stream</a>
                        <div class='author'>Ben Wilcock and Brian McClain</div>
                    </div>
                </div>
            </div>
        </section>
    </section>
</div>
</body>
</html>
